// storage
export const storage = {
  get: (t: string) => {
    return localStorage.getItem(t)
  },
  remove: (t: string) => {
    return localStorage.removeItem(t)
  },
  set: (name: string, t: string) => {
    return localStorage.setItem(name, t)
  }
}
/**
 * 防抖
 * @param fn 需要包装的函数
 * @param delay 延迟时间，单位ms
 * 使用方法 const debounceTask = debounce(task, 1000)
 */
export const debounce = (fn: any, delay: number) => {
  let timer: number | undefined
  return (...args: any) => {
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}

/**
 * 节流
 * @param fn 需要包装的函数
 * @param delay 时间，单位ms 多少ms 执行一次
 * 使用方法 const throttleTask = throttle(task, 1000)
 */
export const throttle = (fn: any, delay: number) => {
  let timer: number | undefined | null
  return (...args: any) => {
    if (timer) return
    timer = setTimeout(() => {
      fn.apply(this, args)
      timer = null
    }, delay)
  }
}
/**
 * 将字符串复制到剪切板
 * @param t 需要复制的文字
 * 使用方法 copyText(t).then(()=>{})
 */

export const copyText = (t: string) => {
  return new Promise((resolve, reject) => {
    try {
      const input = document.createElement('textarea')
      input.value = t
      document.body.appendChild(input)
      input.select()
      document.execCommand('copy')
      input?.parentElement?.removeChild(input)
      resolve(t)
    } catch (e) {
      reject(e)
    }
  })
}

/**
 * 返回指定长度的字符串
 * @param n 长度
 * 使用方法 const text = randomString(9)
 */
export const randomString = (n: number) => {
  const str = 'abcdefghijklmnopqrstuvwxyz9876543210'
  let tmp = ''
  const l = str.length
  for (let i = 0; i < n; i++) {
    tmp += str.charAt(Math.floor(Math.random() * l))
  }
  return tmp
}

/**
 * 数组去重
 * @param arr 需要去重的数组
 * 使用方法 const newArr = unique([1,1,2,3])
 */
export const unique = (arr: Array<any>) => Array.from(new Set(arr))

/**
 * 颜色RGB转十六进制
 * @param r r的值
 * @param g g的值
 * @param b b的值
 *
 * 使用方法 rgbToHex(0, 51, 255)  Result: #0033ff
 */
export const rgbToHex = (r: number, g: number, b: number) =>
  '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)

/**
 * 回到顶部
 * 使用方法  goToTop();
 */

export const goToTop = () => window.scrollTo(0, 0)

/**
 * 校验数组是否为空
 * @param arr 需要效验的数组
 * 使用方法 isNotEmpty([1, 2, 3]); Result: true
 */

export const isNotEmpty = (arr: Array<any>) =>
  Array.isArray(arr) && arr.length > 0
